package com.shundr.auth.user.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.Callable;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.j256.ormlite.stmt.QueryBuilder;
import com.shundr.auth.frame.db.LDaoManager;
import com.shundr.auth.frame.util.LLogger;
import com.shundr.auth.user.model.StaffInfo;
import com.shundr.auth.user.model.UserInfo;

/**
 * StaffDao
 * 
 * @author zhaoyy
 * @version 1.0.0
 *
 */
public class StaffDao {

	private Dao<StaffInfo, Integer> staffDao;

	public StaffDao() {
		staffDao = LDaoManager.createDao(StaffInfo.class);
	}

	/**
	 * 
	 * insert(这里用一句话描述这个方法的作用) 插入用户 (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param userInfo
	 *            void
	 * @exception
	 * @since 1.0.0
	 */
	public void insert(StaffInfo staffInfo) {
		try {
			staffDao.create(staffInfo);
		} catch (SQLException e) {
			LLogger.e("创建数据类型时异常" + e);
		}
	}

	/**
	 * 删除用户 delete(这里用一句话描述这个方法的作用) (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param info
	 *            void
	 * @exception
	 * @since 1.0.0
	 */
	public void delete(final StaffInfo info) {
		try {
			DeleteBuilder<StaffInfo, Integer> deleteBuilder = staffDao
					.deleteBuilder();
			deleteBuilder.where().eq("staffId", info.getStaffId());
			deleteBuilder.delete();
		} catch (SQLException e) {
			LLogger.e("删除用户时发生异常 ： " + e);
		}
	}

	/**
	 * 
	 * syncData(这里用一句话描述这个方法的作用) 批量插入用户 (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param infos
	 *            void
	 * @exception
	 * @since 1.0.0
	 */
	public void syncData(final List<StaffInfo> infos) {
		if (infos == null || infos.size() == 0)
			return;
		try {
			staffDao.callBatchTasks(new Callable<Void>() {

				@Override
				public Void call() throws Exception {
					// userDao.deleteBuilder().delete();
					for (StaffInfo info : infos) {
						staffDao.createOrUpdate(info);
					}
					return null;
				}
			});
		} catch (Exception e) {
			LLogger.e("保存数据类型时发生异常 ： " + e);
		}
	}

}
